#!/bin/bash

# 编译验证脚本 - 验证类型修复是否成功
echo "=== Java 编译验证脚本 ==="
echo "验证时间: $(date)"
echo ""

# 检查Java环境
JAVA_VERSION=$(java -version 2>&1 | head -n1 | cut -d'"' -f2)
echo "Java版本: $JAVA_VERSION"

JAVAC_VERSION=$(javac -version 2>&1)
echo "编译器版本: $JAVAC_VERSION"
echo ""

# 设置项目路径
PROJECT_ROOT="."
SOURCE_PATH="yudao-module-system/yudao-module-system-biz/src/main/java"
TEST_PATH="yudao-module-system/yudao-module-system-biz/src/test/java"

# 检查关键文件是否存在
echo "=== 检查关键文件 ==="
KEY_FILES=(
    "$SOURCE_PATH/cn/iocoder/yudao/module/system/controller/admin/gugu/CollegeRecommendationController.java"
    "$SOURCE_PATH/cn/iocoder/yudao/module/system/util/gugu/ResponseUtils.java"
    "$TEST_PATH/cn/iocoder/yudao/module/system/controller/admin/gugu/CollegeRecommendationControllerTest.java"
)

ALL_FILES_EXIST=true
for file in "${KEY_FILES[@]}"; do
    if [ -f "$file" ]; then
        echo "✅ $file"
    else
        echo "❌ $file (文件不存在)"
        ALL_FILES_EXIST=false
    fi
done

if [ "$ALL_FILES_EXIST" = false ]; then
    echo ""
    echo "❌ 部分关键文件不存在，请检查文件路径"
    exit 1
fi

echo ""

# 检查语法错误
echo "=== 语法检查 ==="

# 检查控制器文件的泛型使用
echo "检查 CollegeRecommendationController.java 的泛型使用..."
CONTROLLER_FILE="$SOURCE_PATH/cn/iocoder/yudao/module/system/controller/admin/gugu/CollegeRecommendationController.java"

# 检查是否正确使用了 DeferredResult 泛型
if grep -q "DeferredResult<CommonResult<CollegeRecommendRespVO>>" "$CONTROLLER_FILE"; then
    echo "✅ DeferredResult 泛型声明正确"
else
    echo "❌ DeferredResult 泛型声明可能有问题"
fi

# 检查是否正确使用了 CompletableFuture 泛型
if grep -q "CompletableFuture<CommonResult<CollegeRecommendRespVO>>" "$CONTROLLER_FILE"; then
    echo "✅ CompletableFuture 泛型声明正确"
else
    echo "❌ CompletableFuture 泛型声明可能有问题"
fi

# 检查是否使用了 ResponseUtils
if grep -q "ResponseUtils\." "$CONTROLLER_FILE"; then
    echo "✅ 正确使用了 ResponseUtils"
else
    echo "⚠️  未使用 ResponseUtils，可能仍有类型问题"
fi

echo ""

# 检查 ResponseUtils 文件
echo "检查 ResponseUtils.java..."
RESPONSE_UTILS_FILE="$SOURCE_PATH/cn/iocoder/yudao/module/system/util/gugu/ResponseUtils.java"

if grep -q "public static <T> CommonResult<T>" "$RESPONSE_UTILS_FILE"; then
    echo "✅ ResponseUtils 泛型方法声明正确"
else
    echo "❌ ResponseUtils 泛型方法声明有问题"
fi

echo ""

# 尝试编译关键类（如果有Maven）
echo "=== 编译验证 ==="

if command -v mvn &> /dev/null; then
    echo "发现 Maven，尝试编译项目..."
    
    # 只编译不运行测试
    mvn compile -q -DskipTests=true 2>&1 | tee compile.log
    
    if [ ${PIPESTATUS[0]} -eq 0 ]; then
        echo "✅ Maven 编译成功"
        
        # 检查是否有编译警告
        if grep -q "WARNING" compile.log; then
            echo "⚠️  编译过程中有警告，请检查："
            grep "WARNING" compile.log
        fi
        
    else
        echo "❌ Maven 编译失败"
        echo "编译错误信息："
        cat compile.log | tail -20
        
        # 检查是否是类型相关的错误
        if grep -q "incompatible types" compile.log; then
            echo ""
            echo "🔍 发现类型不兼容错误，可能的解决方案："
            echo "1. 检查泛型声明是否正确"
            echo "2. 确保使用了正确的 ResponseUtils 方法"
            echo "3. 验证 CommonResult 的泛型参数"
        fi
    fi
    
    rm -f compile.log
    
elif command -v gradle &> /dev/null; then
    echo "发现 Gradle，尝试编译项目..."
    
    ./gradlew compileJava -q 2>&1 | tee compile.log
    
    if [ ${PIPESTATUS[0]} -eq 0 ]; then
        echo "✅ Gradle 编译成功"
    else
        echo "❌ Gradle 编译失败"
        echo "编译错误信息："
        cat compile.log | tail -20
    fi
    
    rm -f compile.log
    
else
    echo "⚠️  未找到 Maven 或 Gradle，跳过编译验证"
    echo "建议手动运行以下命令进行编译验证："
    echo "  mvn compile -DskipTests=true"
    echo "  或"
    echo "  ./gradlew compileJava"
fi

echo ""

# 代码质量检查
echo "=== 代码质量检查 ==="

# 检查是否有未使用的导入
echo "检查未使用的导入..."
UNUSED_IMPORTS=$(grep -n "^import.*\.$" "$CONTROLLER_FILE" 2>/dev/null | wc -l)
if [ "$UNUSED_IMPORTS" -gt 0 ]; then
    echo "⚠️  可能存在 $UNUSED_IMPORTS 个未使用的导入"
else
    echo "✅ 导入语句检查通过"
fi

# 检查方法签名一致性
echo "检查方法签名一致性..."
if grep -q "DeferredResult.*recommendColleges" "$CONTROLLER_FILE" && 
   grep -q "CommonResult.*recommendCollegesFast" "$CONTROLLER_FILE"; then
    echo "✅ 方法签名一致性检查通过"
else
    echo "⚠️  方法签名可能不一致"
fi

echo ""

# 总结
echo "=== 验证总结 ==="
echo "1. 文件存在性检查: $([ "$ALL_FILES_EXIST" = true ] && echo "✅ 通过" || echo "❌ 失败")"
echo "2. 语法检查: 请查看上述详细信息"
echo "3. 编译验证: 请查看编译结果"
echo "4. 代码质量: 请查看质量检查结果"

echo ""
echo "=== 修复建议 ==="
echo "如果仍有类型错误，请检查："
echo "1. 确保所有泛型声明都明确指定了类型参数"
echo "2. 使用 ResponseUtils 工具类创建 CommonResult 对象"
echo "3. 检查 CompletableFuture 和 DeferredResult 的泛型声明"
echo "4. 确保异步处理中的类型转换正确"

echo ""
echo "验证完成时间: $(date)"
